#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author  : Leo.W
# @Date    : 2024-1-19 14:30
# @Software: PyCharm

"""
运算符
Python支持多种运算符，下表大致按照优先级从高到低的顺序列出了所有的运算符，运算符的优先级指的是多个运算符同时出现时，先做什么运算然后再做什么运算。除了我们之前已经用过的赋值运算符和算术运算符，我们稍后会陆续讲到其他运算符的使用。

[] ，[:]	下标，切片
**	指数
~ ，+ ，-	按位取反, 正负号
+ ，- ，* ，/ ，% ，//	加，减，乘，除，模，整除
>> ，<<	右移，左移
&	按位与
^ ，|	按位异或，按位或
<= ，< ，> ，>=	小于等于，小于，大于，大于等于
== ，!=	等于，不等于
is ，is not	身份运算符
in ，not in	成员运算符
not or and	逻辑运算符
= ，+= ，-= ，*= ，/= ，%= ，//= ，**= ，&= ，` 赋值运算符
"""


def operator_test():
    """
    比较运算符和逻辑运算符的使用
    注意：
    1. 除法运算 (/) 总是返回浮点数。
    2. 用 ** 运算符计算乘方
    3. 混合类型运算数的运算会把整数转换为浮点数。如：4 * 3.75 - 1 = 14.0
    :return: None
    """
    a = 10
    b = 3
    a += b  # 相当于 a = a+b
    b *= b + 2  # 相当于 b = b*(b+2)
    c = a % b  # 取模
    print("a = %d" % a)  # a = 13
    print("b = %d" % b)  # b = 15
    print("a %% b = %d" % c)  # a % b = 13
    print("a>b => %s" % (a > b))  # a>b -> False

    flag1 = a == c
    flag2 = a > b
    flag3 = c > b
    # 逻辑运算符: and、or 和 not
    print("flag1 and flag2 => %s" % (flag1 and flag2))  # flag1 and flag2 => False
    print("flag1 or flag2 => %s" % (flag1 or flag2))  # flag1 and flag2 => True
    # flag3 => False , not flag3 => True
    print("flag3 => %s , not flag3 => %s" % (flag3, not flag3))
    # 位移 a的二进制：1101
    a1 = a >> 1  # 110
    a2 = a << 1  # 11010
    a3 = a1 ^ a2  # 11100
    a4 = a2 | a2  # 11010
    print(
        """
    a       => %s
    a>>1    => %s
    a<<1    => %s
    a1 ^ a2 => %s 
    a2 | a2 => %s """
        % (bin(a), bin(a1), bin(a2), bin(a3), bin(a4))
    )

    # in / not in 操作符
    arr = [1, 2, 3, 4, 5]
    print("3 in [1,2,3,4,5] => %s" % (3 in arr))  # 3 in [1,2,3,4,5] => True

    # is / is not 操作符
    print("a is b => %s" % (a is b))  # a is b => False


def convert_to_centigrade_degree():
    """
    华氏温度转换为摄氏温度
    转换公式为：C=(F - 32)/1.8
    :return: None
    """
    try:
        f = float(input("请输入华氏温度:"))
        c = (f - 32) / 1.8
        print("摄氏温度：%.2f °C" % c)
    except ValueError:
        print("Oops!  That was no valid number.  Try again...")


def check_year():
    """
    验证输入的年份是否是润年
    :return: None
    """
    year = int(input("请输入年份:"))
    # 如果代码太长写成一行不便于阅读 可以使用\对代码进行折行
    is_leap = year % 4 == 0 and year % 100 != 0 or year % 400 == 0
    print("%d 是否是闰年 : %s" % (year, is_leap))


operator_test()
convert_to_centigrade_degree()
check_year()
